<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Strict//EN"><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-us">
<title>Coppelia Kinematics Routines, API</title>
<link rel="stylesheet" type="text/css" href="../../helpFiles/style.css">
</head>
<body><div align="center"><table class="allEncompassingTable"><tr><td>
<h1>Coppelia Kinematics Routines<br>API Reference</h1>
<p class="infoBox">All units, unless otherwise indicated, are specified in meters and radians.</p>

<h3 class="subsectionBar">
<a name="ikAddIkElement" id="ikAddIkElement"></a>ikAddIkElement</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Adds a new IK element to an IK group.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikAddIkElement(int ikGroupHandle,int tipHandle,int* ikElementIndex)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>tipHandle</strong>: the handle of the dummy object that should act as the tip in the IK element.</div>
<div><strong>ikElementIndex</strong>: the IK element index in the IK group, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikComputeJacobian" id="ikComputeJacobian"></a>ikComputeJacobian</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Computes the Jacobian for an IK group.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikComputeJacobian(int ikGroupHandle,int options,bool* success=nullptr)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>options</strong>: options flag, bit-coded. bit0 set (i.e. 1): takes joint weights into account.</div>
<div><strong>success</strong>: whether the Jacobian could successfully be computed, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetJacobian">ikGetJacobian</a>, <a href="#ikGetManipulability">ikGetManipulability</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikCreateEnvironment" id="ikCreateEnvironment"></a>ikCreateEnvironment</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Creates an new IK environment, and switches to it.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikCreateEnvironment(int* environmentHandle=nullptr,bool protectedEnvironment=false)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>environmentHandle</strong>: the handle of the newly created environment.</div>
<div><strong>protectedEnvironment</strong>: set to false.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikEraseEnvironment">ikEraseEnvironment</a>, <a href="#ikSwitchEnvironment">ikSwitchEnvironment</a>, <a href="#ikLoad">ikLoad</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikCreateDummy" id="ikCreateDummy"></a>ikCreateDummy</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Creates a dummy object.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikCreateDummy(const char* dummyName/*=nullptr*/,int* dummyHandle)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>dummyName</strong>: the name of the dummy.</div>
<div><strong>dummyHandle</strong>: the handle of the dummy, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikDoesObjectExist">ikDoesObjectExist</a>, <a href="#ikCreateJoint">ikCreateJoint</a>, <a href="#ikEraseObject">ikEraseObject</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikCreateIkGroup" id="ikCreateIkGroup"></a>ikCreateIkGroup</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Creates an IK group.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikCreateIkGroup(const char* ikGroupName/*=nullptr*/,int* ikGroupHandle)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupName</strong>: the name of the IK group.</div>
<div><strong>ikGroupHandle</strong>: the handle of the IK group, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikDoesIkGroupExist">ikDoesIkGroupExist</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikCreateJoint" id="ikCreateJoint"></a>ikCreateJoint</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Creates a joint object.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikCreateJoint(const char* jointName/*=nullptr*/,int jointType,int* jointHandle)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointName</strong>: the name of the joint.</div>
<div><strong>jointType</strong>: the type of the joint. supported types are ik_jointtype_revolute, ik_jointtype_prismatic and ik_jointtype_spherical.</div>
<div><strong>jointHandle</strong>: the handle of the joint, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikDoesObjectExist">ikDoesObjectExist</a>, <a href="#ikCreateJoint">ikCreateDummy</a>, <a href="#ikEraseObject">ikEraseObject</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikDoesObjectExist" id="ikDoesObjectExist"></a>ikDoesObjectExist</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Checks whether an object exists, based on its name.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikDoesObjectExist(const char* objectName)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>objectName</strong>: the name of the object.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true if the object exists.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikDoesIkGroupExist" id="ikDoesIkGroupExist"></a>ikDoesIkGroupExist</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Checks whether an IK group exists, based on its name.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikDoesIkGroupExist(const char* ikGroupName)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupName</strong>: the name of the IK group.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true if the IK group exists.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikEraseEnvironment" id="ikEraseEnvironment"></a>ikEraseEnvironment</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Erases an IK environment, and switches to another environment, if available.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikEraseEnvironment(int* switchedEnvironmentHandle=nullptr)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>switchedEnvironmentHandle</strong>: the handle of the environment that was switched to, or -1 if there is no environment left.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikCreateEnvironment">ikCreateEnvironment</a>, <a href="#ikSwitchEnvironment">ikSwitchEnvironment</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikEraseObject" id="ikEraseObject"></a>ikEraseObject</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Erases an object.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikEraseObject(int objectHandle)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>objectHandle</strong>: handle of the object.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetObjectHandle">ikGetObjectHandle</a>, <a href="#ikCreateDummy">ikCreateDummy</a>, <a href="#ikCreateJoint">ikCreateJoint</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetConfigForTipPose" id="ikGetConfigForTipPose"></a>ikGetConfigForTipPose</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Searches for a manipulator configuration that matches a given end-effector position/orientation in space. Search is randomized.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">int ikGetConfigForTipPose(int ikGroupHandle,size_t jointCnt,const int* jointHandles,simReal thresholdDist,int maxIterations,simReal* retConfig,const simReal* metric=nullptr,bool(*validationCallback)(simReal*)=nullptr,const int* jointOptions=nullptr,const simReal* lowLimits=nullptr,const simReal* ranges=nullptr)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>jointCnt</strong>: the number of joint handles provided in the jointHandles array.</div>
<div><strong>jointHandles</strong>: an array with jointCnt entries, that specifies the joint handles for the joints we wish to retrieve the values calculated by the IK.</div>
<div><strong>thresholdDist</strong>: a distance indicating when IK should be computed in order to try to bring the tip onto the target: since the search algorithm proceeds by generating random configurations, many of them produce a tip pose that is too far from the target pose to run IK successfully. Choosing a large value will result in slow calculations, choosing a small value might produce a smaller subset of solutions. Distance between two poses is calculated using a metric (see metric argument below).</div>
<div><strong>maxIterations</strong>: the maximum number of iterations before this function returns.</div>
<div><strong>retConfig</strong>: an array with jointCnt entries, that will receive the IK calculated joint values, as specified by the jointHandles array.</div>
<div><strong>metric</strong>: an array to 4 values indicating a metric used to compute pose-pose distances: distance=sqrt((dx*metric[0])^2+(dy*metric[1])^2+(dz*metric[2])^2+(angle*metric[3])^2).</div>
<div><strong>validationCallback</strong>: a callback function taking as input argument the proposed joint values (i.e. a configuration), and as return value whether the configuration is valid (e.g. is not colliding).</div>
<div><strong>jointOptions</strong>: a bit-coded value corresponding to each specified joint handle. Bit 0 (i.e. 1) indicates the corresponding joint is dependent of another joint.</div>
<div><strong>lowLimits</strong>: an optional array pointing to different low limit values for each specified joint. This can be useful when you wish to explore a sub-set of the joint's intervals.</div>
<div><strong>ranges</strong>: an optional array pointing to different range values for each specified joint. This can be useful when you wish to explore a sub-set of the joint's intervals.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">-1 in case of an error, 0 if no valid configuration was found, 1 otherwise.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikComputeJacobian">ikComputeJacobian</a>, <a href="#ikGetJacobian">ikGetJacobian</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetIkElementBase" id="ikGetIkElementBase"></a>ikGetIkElementBase</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the base object of an IK element.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetIkElementBase(int ikGroupHandle,int ikElementIndex,int* baseHandle,int* constraintsBaseHandle)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>ikElementIndex</strong>: the IK element index, or X, where X=handleOfTipDummy|ik_handleflag_tipdummy (if several IK elements with the same tip dummy exist, then the first encountered will be selected).</div>
<div><strong>baseHandle</strong>: the handle of the base object, in return, or -1 if the world is the base.</div>
<div><strong>constraintsBaseHandle</strong>: the handle of the constraints base object, in return, relative to which the constraints are specified. Returns -1 if the constraints are relative to the base object.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetIkElementBase">ikSetIkElementBase</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetIkElementConstraints" id="ikGetIkElementConstraints"></a>ikGetIkElementConstraints</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the constraints of an IK element.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetIkElementConstraints(int ikGroupHandle,int ikElementIndex,int* constraints)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>ikElementIndex</strong>: the IK element index, or X, where X=handleOfTipDummy|ik_handleflag_tipdummy (if several IK elements with the same tip dummy exist, then the first encountered will be selected).</div>
<div><strong>constraints</strong>: the constraints, in return. A combination of following is possible: ik_constraint_x, ik_constraint_y, ik_constraint_z, ik_constraint_alpha_beta, ik_constraint_gamma. For convenience we also have ik_constraint_position=ik_constraint_x|ik_constraint_y|ik_constraint_z, ik_constraint_orientation=ik_constraint_alpha_beta|ik_constraint_gamma, and ik_constraint_pose=ik_constraint_position|ik_constraint_orientation.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetIkElementConstraints">ikSetIkElementConstraints</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetIkElementEnabled" id="ikGetIkElementEnabled"></a>ikGetIkElementEnabled</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the enabled flag of an IK element.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetIkElementEnabled(int ikGroupHandle,int ikElementIndex,bool* enabled)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>ikElementIndex</strong>: the IK element index, or X, where X=handleOfTipDummy|ik_handleflag_tipdummy (if several IK elements with the same tip dummy exist, then the first encountered will be selected).</div>
<div><strong>enabled</strong>: the enabled flag, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetIkElementEnabled">ikSetIkElementEnabled</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetIkElementPrecision" id="ikGetIkElementPrecision"></a>ikGetIkElementPrecision</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the precision settings of an IK element.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetIkElementPrecision(int ikGroupHandle,int ikElementIndex,simReal* linearPrecision,simReal* angularPrecision)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>ikElementIndex</strong>: the IK element index, or X, where X=handleOfTipDummy|ik_handleflag_tipdummy (if several IK elements with the same tip dummy exist, then the first encountered will be selected).</div>
<div><strong>linearPrecision</strong>: the required linear precision, in return.</div>
<div><strong>angularPrecision</strong>: the required angular precision, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetIkElementPrecision">ikSetIkElementPrecision</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetIkElementWeights" id="ikGetIkElementWeights"></a>ikGetIkElementWeights</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the desired linear and angular resolution weights of an IK element.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetIkElementWeights(int ikGroupHandle,int ikElementIndex,simReal* linearWeight,simReal* angularWeight)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>ikElementIndex</strong>: the IK element index, or X, where X=handleOfTipDummy|ik_handleflag_tipdummy (if several IK elements with the same tip dummy exist, then the first encountered will be selected).</div>
<div><strong>linearWeight</strong>: the linear resolution weight, in return.</div>
<div><strong>angularWeight</strong>: the angular resolution weight, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetIkElementWeights">ikSetIkElementWeights</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetIkGroupCalculation" id="ikGetIkGroupCalculation"></a>ikGetIkGroupCalculation</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves calculation properties for an IK group.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetIkGroupCalculation(int ikGroupHandle,int* method,simReal* damping,int* maxIterations)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>method</strong>: the resolution method, in return. Possible values are ik_method_pseudo_inverse and ik_method_damped_least_squares.</div>
<div><strong>damping</strong>: the damping, in case the resolution method is ik_method_damped_least_squares, in return.</div>
<div><strong>maxIterations</strong>: the maximum number of iterations, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetIkGroupCalculation">ikSetIkGroupCalculation</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetIkGroupFlags" id="ikGetIkGroupFlags"></a>ikGetIkGroupFlags</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves flags of an IK group.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetIkGroupFlags(int ikGroupHandle,int* flags)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>flags</strong>: the flags of the IK group, in return. bit0 set (i.e. 1)=group is enabled, bit1 set (i.e. 2)=max. step sizes are ignored, bit2 set (i.e. 4)=restore joints if target position not reached, bit3 set (i.e. 8)=restore joints if target orientation not reached.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetIkGroupFlags">ikSetIkGroupFlags</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetIkGroupHandle" id="ikGetIkGroupHandle"></a>ikGetIkGroupHandle</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the handle of an IK group based on its name.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetIkGroupHandle(const char* ikGroupName,int* ikGroupHandle)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupName</strong>: the name of the IK group.</div>
<div><strong>ikGroupHandle</strong>: the returned IK group handle.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikDoesIkGroupExist">ikDoesIkGroupExist</a>, <a href="#ikCreateIkGroup">ikCreateIkGroup</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetJacobian" id="ikGetJacobian"></a>ikGetJacobian</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the Jacobian previously computed via <a href="#ikComputeJacobian">ikComputeJacobian</a>.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">simReal* ikGetJacobian(int ikGroupHandle,size_t* matrixSize)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>matrixSize</strong>: a pointer to two values for the size (row count (i.e. number of DoFs) and column count) of the Jacobian matrix, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">a pointer to the matrix. Use <a href="#ikReleaseBuffer">ikReleaseBuffer</a> to release the memory when done.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikComputeJacobian">ikComputeJacobian</a>, <a href="#ikGetManipulability">ikGetManipulability</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetJointDependency" id="ikGetJointDependency"></a>ikGetJointDependency</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves information about a possible joint dependency.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetJointDependency(int jointHandle,int* dependencyJointHandle,simReal* offset,simReal* mult)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>dependencyJointHandle</strong>: the handle of the dependency joint, in return.</div>
<div><strong>offset</strong>: the offset, in return. We have joint position = dependency joint position * mult + offset.</div>
<div><strong>mult</strong>: the multiplication factor, in return. We have joint position = dependency joint position * mult + offset.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetJointDependency">ikSetJointDependency</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetJointIkWeight" id="ikGetJointIkWeight"></a>ikGetJointIkWeight</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the IK weight of a joint, i.e. the weight it has during IK resolution.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetJointIkWeight(int jointHandle,simReal* ikWeight)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>ikWeight</strong>: the IK weight, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetJointIkWeight">ikSetJointIkWeight</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetJointInterval" id="ikGetJointInterval"></a>ikGetJointInterval</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the joint limits.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetJointInterval(int jointHandle,bool* cyclic,simReal* intervalMinAndRange)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>cyclic</strong>: whether the joint is cyclic (has no limits).</div>
<div><strong>intervalMinAndRange</strong>: a pointer to two values: the joint lower limit, and the joint range (i.e. joint upper limit = joint lower limit + joint range)</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetJointInterval">ikSetJointInterval</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetJointMatrix" id="ikGetJointMatrix"></a>ikGetJointMatrix</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the intrinsic transformation matrix of a joint.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetJointMatrix(int jointHandle,C4X4Matrix* matrix)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>matrix</strong>: the transformation matrix, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetSphericalJointMatrix">ikSetSphericalJointMatrix</a>, <a href="#ikGetJointPosition">ikGetJointPosition</a>, <a href="#ikGetJointTransformation">ikGetJointTransformation</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetJointMaxStepSize" id="ikGetJointMaxStepSize"></a>ikGetJointMaxStepSize</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the maximum step size of a joint.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetJointMaxStepSize(int jointHandle,simReal* maxStepSize)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>maxStepSize</strong>: the maximum step size, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetJointMaxStepSize">ikSetJointMaxStepSize</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetJointMode" id="ikGetJointMode"></a>ikGetJointMode</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the joint mode.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetJointMode(int jointHandle,int* mode)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>mode</strong>: the joint mode, in return. Possible values are: ik_jointmode_passive, ik_jointmode_ik, ik_jointmode_dependent, ik_jointmode_force</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">

<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetJointMode">ikSetJointMode</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetJointPosition" id="ikGetJointPosition"></a>ikGetJointPosition</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the position (linear or angular) of a joint.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetJointPosition(int jointHandle,simReal* position)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>position</strong>: the position, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetJointPosition">ikSetJointPosition</a>, <a href="#ikGetJointMatrix">ikGetJointMatrix</a>, <a href="#ikGetJointTransformation">ikGetJointTransformation</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetJointScrewPitch" id="ikGetJointScrewPitch"></a>ikGetJointScrewPitch</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the screw pitch of a revolute joint.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetJointScrewPitch(int jointHandle,simReal* pitch)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>pitch</strong>: the screw pitch of the joint, in return. A pitch value of zero represents a revolute joint, a value different from zero represents a screw.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetJointScrewPitch">ikSetJointScrewPitch</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetJointTransformation" id="ikGetJointTransformation"></a>ikGetJointTransformation</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the intrinsic transformation of a joint.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetJointTransformation(int jointHandle,C7Vector* transf)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>transf</strong>: the transformation, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetSphericalJointQuaternion">ikSetSphericalJointQuaternion</a>, <a href="#ikGetJointPosition">ikGetJointPosition</a>, <a href="#ikGetJointMatrix">ikGetJointMatrix</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetLastError" id="ikGetLastError"></a>ikGetLastError</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves and clears the last error string.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">std::string ikGetLastError()</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">The error string.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetLinkedDummy" id="ikGetLinkedDummy"></a>ikGetLinkedDummy</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the handle of a dummy linked to this one.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetLinkedDummy(int dummyHandle,int* linkedDummyHandle)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>dummyHandle</strong>: the handle of the dummy object.</div>
<div><strong>linkedDummyHandle</strong>: the handle of the linked dummy object, in return. Is -1 if no dummy object is linked to this one.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetLinkedDummy">ikSetLinkedDummy</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetManipulability" id="ikGetManipulability"></a>ikGetManipulability</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the manipulability value ( sqrt(det(J*JT)) ) of the Jacobian previously computed via <a href="#ikComputeJacobian">ikComputeJacobian</a>.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetManipulability(int ikGroupHandle,simReal* manip)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>manip</strong>: the manipulability value, in return.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikComputeJacobian">ikComputeJacobian</a>, <a href="#ikGetJacobian">ikGetJacobian</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetObjectHandle" id="ikGetObjectHandle"></a>ikGetObjectHandle</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the handle of an object based on its name.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetObjectHandle(const char* objectName,int* objectHandle)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>objectName</strong>: the name of the object.</div>
<div><strong>objectHandle</strong>: the returned object handle.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikDoesObjectExist">ikDoesObjectExist</a>, <a href="#ikCreateDummy">ikCreateDummy</a>, <a href="#ikCreateJoint">ikCreateJoint</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetObjectMatrix" id="ikGetObjectMatrix"></a>ikGetObjectMatrix</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the transformation matrix of an object. If the object is a joint object, the matrix does not include the joint's intrinsic transformation.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetObjectMatrix(int objectHandle,int relativeToObjectHandle,C4X4Matrix* matrix)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>objectHandle</strong>: the handle of the object.</div>
<div><strong>relativeToObjectHandle</strong>: the handle of an object relative to which we want the matrix expressed. Otherwise, specify -1 if you want the absolute matrix, or ik_handle_parent if you want the matrix relative to the parent object.</div>
<div><strong>matrix</strong>: a pointer to 12 values representing the transformation matrix (the last row of the 4x4 matrix (0,0,0,1) is omitted)</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetObjectMatrix">ikSetObjectMatrix</a>, <a href="#ikGetObjectTransformation">ikGetObjectTransformation</a>, <a href="#ikGetJointTransformation">ikGetJointTransformation</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetObjectParent" id="ikGetObjectParent"></a>ikGetObjectParent</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves an object's parent handle.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetObjectParent(int objectHandle,int* parentObjectHandle)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>objectHandle</strong>: the handle of the object.</div>
<div><strong>parentObjectHandle</strong>: the returned handle of the parent, or -1 if the object has no parent.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetObjectParent">ikSetObjectParent</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetObjects" id="ikGetObjects"></a>ikGetObjects</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Allows to loop through all objects in the environment.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetObjects(size_t index,int* objectHandle=nullptr,std::string* objectName=nullptr,bool* isJoint=nullptr,int* jointType=nullptr)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>index</strong>: the zero-based index. Start at 0, and increment until the return value is false, in order to loop through all objects in the environment.</div>
<div><strong>objectHandle</strong>: the handle of the object, in return.</div>
<div><strong>objectName</strong>: the name of the object, in return.</div>
<div><strong>isJoint</strong>: whether the object is a joint, in return.</div>
<div><strong>jointType</strong>: the type of joint, in return, if the object at the specified index is a joint. Possible values are ik_jointtype_revolute, ik_jointtype_prismatic or ik_jointtype_spherical.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">false in case of an error, or if no object exists at the specified index.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetObjectHandle">ikGetObjectHandle</a>, <a href="#ikDoesObjectExist">ikDoesObjectExist</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikGetObjectTransformation" id="ikGetObjectTransformation"></a>ikGetObjectTransformation</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Retrieves the transformation (position and quaternion) of an object. If the object is a joint object, the transformation does not include the joint's intrinsic transformation.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikGetObjectTransformation(int objectHandle,int relativeToObjectHandle,C7Vector* transf)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>objectHandle</strong>: the handle of the object.</div>
<div><strong>relativeToObjectHandle</strong>: the handle of an object relative to which we want the transformation expressed. Otherwise, specify -1 if you want the absolute transformation, or ik_handle_parent if you want the transformation relative to the parent object.</div>
<div><strong>transf</strong>: a pointer to the transformation that will be returned.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikSetObjectTransformation">ikSetObjectTransformation</a>, <a href="#ikGetObjectMatrix">ikGetObjectMatrix</a>, <a href="#ikGetJointTransformation">ikGetJointTransformation</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikHandleIkGroup" id="ikHandleIkGroup"></a>ikHandleIkGroup</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Handles (i.e. computes/resolves) an IK group.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikHandleIkGroup(int ikGroupHandle=ik_handle_all,int* result=nullptr)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group (in that case make sure the IK group is flagged as explicit handling (default when creating a new IK group)), or ik_handle_all to handle all IK groups.</div>
<div><strong>result</strong>: the resolution result, in return. Possible values are ik_result_not_performed, ik_result_success, ik_result_fail</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikComputeJacobian">ikComputeJacobian</a>, <a href="#ikGetConfigForTipPose">ikGetConfigForTipPose</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikLoad" id="ikLoad"></a>ikLoad</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Loads kinematic content previously exported in the CoppeliaSim application. Make sure that the environment is empty before calling this function.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikLoad(const unsigned char* data,size_t dataLength)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>data</strong>: a pointer to a buffer with the kinematic content.</div>
<div><strong>dataLength</strong>: the size of the kinematic content buffer.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikCreateEnvironment">ikCreateEnvironment</a>, <a href="#ikEraseEnvironment">ikEraseEnvironment</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikReleaseBuffer" id="ikReleaseBuffer"></a>ikReleaseBuffer</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Releases a buffer allocated by the specific API functions.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">void ikReleaseBuffer(void* buffer)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>buffer</strong>: the buffer to release.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet"></td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetIkElementBase" id="ikSetIkElementBase"></a>ikSetIkElementBase</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the base object of an IK element.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetIkElementBase(int ikGroupHandle,int ikElementIndex,int baseHandle,int constraintsBaseHandle=-1)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>ikElementIndex</strong>: the IK element index, or X, where X=handleOfTipDummy|ik_handleflag_tipdummy (if several IK elements with the same tip dummy exist, then the first encountered will be selected).</div>
<div><strong>baseHandle</strong>: the handle of the base object, or -1 if the world is the base.</div>
<div><strong>constraintsBaseHandle</strong>: the handle of the constraints base object, relative to which the constraints are specified. Set to -1 to have the constraints relative to the base object.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetIkElementBase">ikGetIkElementBase</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetIkElementConstraints" id="ikSetIkElementConstraints"></a>ikSetIkElementConstraints</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the constraints of an IK element.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetIkElementConstraints(int ikGroupHandle,int ikElementIndex,int constraints)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>ikElementIndex</strong>: the IK element index, or X, where X=handleOfTipDummy|ik_handleflag_tipdummy (if several IK elements with the same tip dummy exist, then the first encountered will be selected).</div>
<div><strong>constraints</strong>: the constraints. Combine following: ik_constraint_x, ik_constraint_y, ik_constraint_z, ik_constraint_alpha_beta, ik_constraint_gamma (ik_constraint_gamma should only be set if ik_constraint_alpha_beta is also set). For convenience we also have ik_constraint_position=ik_constraint_x|ik_constraint_y|ik_constraint_z, ik_constraint_orientation=ik_constraint_alpha_beta|ik_constraint_gamma, and ik_constraint_pose=ik_constraint_position|ik_constraint_orientation.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetIkElementConstraints">ikGetIkElementConstraints</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetIkElementEnabled" id="ikSetIkElementEnabled"></a>ikSetIkElementEnabled</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the enabled flag of an IK element.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetIkElementEnabled(int ikGroupHandle,int ikElementIndex,bool enabled)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>ikElementIndex</strong>: the IK element index, or X, where X=handleOfTipDummy|ik_handleflag_tipdummy (if several IK elements with the same tip dummy exist, then the first encountered will be selected).</div>
<div><strong>enabled</strong>: the enabled flag.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetIkElementEnabled">ikGetIkElementEnabled</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetIkElementPrecision" id="ikSetIkElementPrecision"></a>ikSetIkElementPrecision</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the desired precision of an IK element.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetIkElementPrecision(int ikGroupHandle,int ikElementIndex,simReal linearPrecision,simReal angularPrecision)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>ikElementIndex</strong>: the IK element index, or X, where X=handleOfTipDummy|ik_handleflag_tipdummy (if several IK elements with the same tip dummy exist, then the first encountered will be selected).</div>
<div><strong>linearPrecision</strong>: the required linear precision.</div>
<div><strong>angularPrecision</strong>: the required angular precision.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetIkElementPrecision">ikGetIkElementPrecision</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetIkElementWeights" id="ikSetIkElementWeights"></a>ikSetIkElementWeights</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the desired linear and angular resolution weights of an IK element.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetIkElementWeights(int ikGroupHandle,int ikElementIndex,simReal linearWeight,simReal angularWeight)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>ikElementIndex</strong>: the IK element index, or X, where X=handleOfTipDummy|ik_handleflag_tipdummy (if several IK elements with the same tip dummy exist, then the first encountered will be selected).</div>
<div><strong>linearWeight</strong>: the desired linear resolution weight.</div>
<div><strong>angularWeight</strong>: the desired angular resolution weight.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetIkElementWeights">ikGetIkElementWeights</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetIkGroupCalculation" id="ikSetIkGroupCalculation"></a>ikSetIkGroupCalculation</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets calculation properties for an IK group.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetIkGroupCalculation(int ikGroupHandle,int method,simReal damping,int maxIterations)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>method</strong>: the resolution method. Possible values are ik_method_pseudo_inverse and ik_method_damped_least_squares.</div>
<div><strong>damping</strong>: the damping, in case the resolution method is ik_method_damped_least_squares.</div>
<div><strong>maxIterations</strong>: the maximum number of iterations.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetIkGroupCalculation">ikGetIkGroupCalculation</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetIkGroupFlags" id="ikSetIkGroupFlags"></a>ikSetIkGroupFlags</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets flags of an IK group.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetIkGroupFlags(int ikGroupHandle,int flags)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>ikGroupHandle</strong>: the handle of the IK group.</div>
<div><strong>flags</strong>: the flags of the IK group. bit0 set (i.e. 1)=group is enabled, bit1 set (i.e. 2)=max. step sizes are ignored, bit2 set (i.e. 4)=restore joints if target position not reached, bit3 set (i.e. 8)=restore joints if target orientation not reached.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetIkGroupFlags">ikGetIkGroupFlags</a>, <a href="#ikGetIkGroupHandle">ikGetIkGroupHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetJointDependency" id="ikSetJointDependency"></a>ikSetJointDependency</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets information about a possible dependent joint.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetJointDependency(int jointHandle,int dependencyJointHandle,simReal offset=0.0,simReal mult=1.0)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>dependencyJointHandle</strong>: the handle of the joint, this joint is dependent of. -1 to disable.</div>
<div><strong>offset</strong>: the offset. We have joint position = dependency joint position * mult + offset</div>
<div><strong>mult</strong>: the multiplication factor. We have joint position = dependency joint position * mult + offset</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetJointDependency">ikGetJointDependency</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetJointIkWeight" id="ikSetJointIkWeight"></a>ikSetJointIkWeight</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the IK weight of a joint, i.e. the weight it has during IK resolution.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetJointIkWeight(int jointHandle,simReal ikWeight)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>ikWeight</strong>: the IK weight.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetJointIkWeight">ikGetJointIkWeight</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetJointInterval" id="ikSetJointInterval"></a>ikSetJointInterval</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the joint limits.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetJointInterval(int jointHandle,bool cyclic,const simReal* intervalMinAndRange=nullptr)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>cyclic</strong>: whether the joint is cyclic (has no limits). Only revolute joints can be cyclic.</div>
<div><strong>intervalMinAndRange</strong>: a pointer to two values: the joint lower limit, and the joint range (i.e. joint upper limit = joint lower limit + joint range)</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetJointInterval">ikGetJointInterval</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetJointMaxStepSize" id="ikSetJointMaxStepSize"></a>ikSetJointMaxStepSize</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the maximum step size of a joint.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetJointMaxStepSize(int jointHandle,simReal maxStepSize)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>maxStepSize</strong>: the maximum step size.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetJointMaxStepSize">ikGetJointMaxStepSize</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetJointMode" id="ikSetJointMode"></a>ikSetJointMode</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the joint mode.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetJointMode(int jointHandle,int jointMode)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>jointMode</strong>: the joint mode. Allowed values are: ik_jointmode_passive, ik_jointmode_ik, ik_jointmode_dependent</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetJointMode">ikGetJointMode</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetJointPosition" id="ikSetJointPosition"></a>ikSetJointPosition</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the position (linear or angular) of a joint.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetJointPosition(int jointHandle,simReal position)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>position</strong>: the position.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetJointPosition">ikGetJointPosition</a>, <a href="#ikSetSphericalJointMatrix">ikSetSphericalJointMatrix</a>, <a href="#ikSetSphericalJointQuaternion">ikSetSphericalJointQuaternion</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetJointScrewPitch" id="ikSetJointScrewPitch"></a>ikSetJointScrewPitch</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the screw pitch, in case of a revolute joint.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetJointScrewPitch(int jointHandle,simReal pitch)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>pitch</strong>: the screw pitch of the joint. A pitch value of zero represents a revolute joint, a value different from zero represents a screw.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetJointScrewPitch">ikGetJointScrewPitch</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetLinkedDummy" id="ikSetLinkedDummy"></a>ikSetLinkedDummy</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Links this dummy object to another dummy object, or detaches it from another dummy object.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetLinkedDummy(int dummyHandle,int linkedDummyHandle)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>dummyHandle</strong>: the handle of the dummy object.</div>
<div><strong>linkedDummyHandle</strong>: the handle of the dummy object to be linked, or -1 to detach this dummy object from a linked dummy object.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetLinkedDummy">ikGetLinkedDummy</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetObjectMatrix" id="ikSetObjectMatrix"></a>ikSetObjectMatrix</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the transformation matrix of an object. If the object is a joint object, the matrix does not include the joint's intrinsic transformation.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetObjectMatrix(int objectHandle,int relativeToObjectHandle,const C4X4Matrix* matrix)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>objectHandle</strong>: the handle of the object.</div>
<div><strong>relativeToObjectHandle</strong>: the handle of an object relative to which the matrix is expressed. Otherwise, specify -1 if you specify the absolute matrix, or ik_handle_parent if you specify the matrix relative to the parent object.</div>
<div><strong>matrix</strong>: the transformation matrix</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetObjectMatrix">ikGetObjectMatrix</a>, <a href="#ikSetObjectTransformation">ikSetObjectTransformation</a>, <a href="#ikSetJointPosition">ikSetJointPosition</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetObjectParent" id="ikSetObjectParent"></a>ikSetObjectParent</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the parent of an object.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetObjectParent(int objectHandle,int parentObjectHandle,bool keepInPlace)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>objectHandle</strong>: the handle of the object.</div>
<div><strong>parentObjectHandle</strong>: the desired parent object, Set -1 for no parent.</div>
<div><strong>keepInPlace</strong>: if true, the object will stay in place, otherwise, it will keep its local transformation.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetObjectParent">ikGetObjectParent</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetObjectTransformation" id="ikSetObjectTransformation"></a>ikSetObjectTransformation</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the transformation (position and quaternion) of an object. If the object is a joint object, the transformation does not include the joint's intrinsic transformation.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetObjectTransformation(int objectHandle,int relativeToObjectHandle,const C7Vector* transf)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>objectHandle</strong>: the handle of the object.</div>
<div><strong>relativeToObjectHandle</strong>: the handle of an object relative to which the transformation is expressed. Otherwise, specify -1 if you specify the absolute transformation, or ik_handle_parent if you specify the transformation relative to the parent object.</div>
<div><strong>transf</strong>: the transformation.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetObjectTransformation">ikGetObjectTransformation</a>, <a href="#ikSetObjectMatrix">ikSetObjectMatrix</a>, <a href="#ikSetJointPosition">ikSetJointPosition</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetSphericalJointMatrix" id="ikSetSphericalJointMatrix"></a>ikSetSphericalJointMatrix</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the rotation transformation matrix of a spherical joint.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetSphericalJointMatrix(int jointHandle,const C3X3Matrix* rotMatrix)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>rotMatrix</strong>: the rotation transformation matrix to apply.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetJointMatrix">ikGetJointMatrix</a>, <a href="#ikSetJointPosition">ikSetJointPosition</a>, <a href="#ikSetSphericalJointQuaternion">ikSetSphericalJointQuaternion</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSetSphericalJointQuaternion" id="ikSetSphericalJointQuaternion"></a>ikSetSphericalJointQuaternion</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Sets the rotation transformation of a spherical joint.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSetSphericalJointQuaternion(int jointHandle,const C4Vector* quaternion)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>jointHandle</strong>: the handle of the joint.</div>
<div><strong>quaternion</strong>: the rotation transformation to apply.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikGetJointTransformation">ikGetJointTransformation</a>, <a href="#ikSetSphericalJointMatrix">ikSetSphericalJointMatrix</a>, <a href="#ikSetJointPosition">ikSetJointPosition</a>, <a href="#ikGetObjectHandle">ikGetObjectHandle</a></td>
</tr>
</table>
<br>

<h3 class="subsectionBar">
<a name="ikSwitchEnvironment" id="ikSwitchEnvironment"></a>ikSwitchEnvironment</h3>
<table class="apiTable">
<tr class="apiTableTr">
<td class="apiTableLeftDescr">Description</td>
<td class="apiTableRightDescr">Switches to another environment and all function calls will be directed to that environment.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCSyn">Synopsis</td>
<td class="apiTableRightCSyn">bool ikSwitchEnvironment(int handle,bool allowAlsoProtectedEnvironment=false)</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCParam">Arguments</td>
<td class="apiTableRightCParam">
<div><strong>handle</strong>: handle of the environment to switch to.</div>
<div><strong>allowAlsoProtectedEnvironment</strong>: set to false.</div>
</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftCRet">Return value</td>
<td class="apiTableRightCRet">true in case of success.</td>
</tr>
<tr class="apiTableTr">
<td class="apiTableLeftDescr">See also</td>
<td class="apiTableRightDescr"><a href="#ikCreateEnvironment">ikCreateEnvironment</a>, <a href="#ikEraseEnvironment">ikEraseEnvironment</a></td>
</tr>
</table>
<br>
<br>





</td></tr></table></div></body>
</html>
